// 全局医院工具函数
// 用于所有云对象自动获取和挂载医院ID

const db = uniCloud.database()

/**
 * 获取唯一医院ID（同步方法）
 * 所有需要hospital_id的云对象在创建数据时调用此方法
 * 
 * @returns {string|null} 医院ID，如果不存在返回null
 */
async function getHospitalId() {
	try {
		const res = await db.collection('dh-hospitals')
			.field({ _id: true })
			.limit(1)
			.get()
		
		const hospitals = res.data || []
		return hospitals.length > 0 ? hospitals[0]._id : null
	} catch (err) {
		console.error('获取医院ID失败:', err)
		return null
	}
}

/**
 * 验证医院是否存在
 * 
 * @returns {boolean} 是否存在
 */
async function checkHospitalExists() {
	try {
		const countRes = await db.collection('dh-hospitals').count()
		return (countRes.total || 0) > 0
	} catch (err) {
		console.error('检查医院失败:', err)
		return false
	}
}

/**
 * 获取医院完整信息
 * 
 * @returns {object|null} 医院信息对象
 */
async function getHospitalInfo() {
	try {
		const res = await db.collection('dh-hospitals')
			.limit(1)
			.get()
		
		const hospitals = res.data || []
		return hospitals.length > 0 ? hospitals[0] : null
	} catch (err) {
		console.error('获取医院信息失败:', err)
		return null
	}
}

/**
 * 自动挂载医院ID到数据对象
 * 如果数据中已有hospital_id则保留，否则自动获取并添加
 * 
 * @param {object} data - 要挂载的数据对象
 * @returns {object} 挂载后的数据对象
 * @throws {Error} 如果医院不存在则抛出异常
 */
async function autoMountHospitalId(data) {
	// 如果已经有hospital_id，直接返回
	if (data.hospital_id) {
		return data
	}
	
	// 自动获取医院ID
	const hospitalId = await getHospitalId()
	
	if (!hospitalId) {
		throw new Error('系统中尚未创建医院信息，请先在"医院设置-医院管理"中创建医院')
	}
	
	// 挂载医院ID
	data.hospital_id = hospitalId
	return data
}

module.exports = {
	getHospitalId,
	checkHospitalExists,
	getHospitalInfo,
	autoMountHospitalId
}

